<?php
/**
 * 后台管理基类
 *
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 *
 * @author      cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */
abstract class UE_Controller_Admin extends UE_Controller_Abstract {
	protected $_x = array();

	private $_msgs = array(
        /*
        'ok' => array(), 
        'warning' => array(), 
        'error' => array(),
        */
    );
	
	/**
	 * 是否有错误提示消息
	 *
	 * @return bool
	 */
	public function hasErr() {
		return empty($this->_msgs['error'])? false : true;		
	}

	/**
	 * 是否有正确提示消息
	 *
	 * @return bool
	 */	
	public function hasOK() {
		return empty($this->_msgs['ok'])? false : true;		
	}	
	
	/**
	 * 是否有警告提示消息
	 *
	 * @return bool
	 */	
	public function hasWarn() {
		return empty($this->_msgs['warning'])? false : true;		
	}
	
	/**
	 * 获取所有消息
	 *
	 * @return bool
	 */
	public function hasMsgs() {
		return  empty($this->_msgs)? false : true;
	}	
	
	/**
	 * 获取所有消息
	 *
	 * @return array
	 */
	public function getMsgs() {
		return $this->_msgs;
	}
	
	/**
	 * 获取错误提示消息
	 *
	 * @return array
	 */
	public function getErrs() {
		return $this->_msgs['error'];
	}
	
	/**
	 * 获取正确提示消息
	 *
	 * @return array
	 */
	public function getOKs() {
		return $this->_msgs['ok'];
	}
	
	/**
	 * 获取警告提示消息
	 *
	 * @return array
	 */
	public function getWarns() {
		return $this->_msgs['warning'];
	}
	
	/**
	 * 设置错误提示消息
	 *
	 * @param string|array $msg 消息
	 */
	public function setErr($msg) {
		self::_setMsg('error', $msg);
	}
	
	/**
	 * 设置正确提示消息
	 * 
	 * @param string|array $msg 消息
	 */
	public function setOK($msg) {
		self::_setMsg('ok', $msg);
	}
	
	/**
	 * 设置警告提示消息
	 *
	 * @param string|array $msg 消息
	 */
	public function setWarn($msg) {
		self::_setMsg('warning', $msg);
	}
	
	/**
	 * 设置消息
	 *
	 * @param string $type 消息类型
	 * @param string|array $msg
	 */
	private function _setMsg($type, $msg)  {
		if (is_array($msg)) {
			foreach ($msg as $m) {
				$this->_msgs[$type][] = $m;
			}
		} else {
		    $this->_msgs[$type][] = $msg;
		}
	}
	
	/**
	 * 控制器初始化,详细功能运行之前被允许,
	 * __construct限制为final,用此方法来替代__construct方法
	 *
	 */
	public function init() {}

	public $vars = array();
	
	final public function __construct() {		
		$this->app      = &$_GET['app'];
		$this->ctl      = &$_GET['ctl'];
		$this->act      = &$_GET['act'];
		$this->id       = &$_GET['id'];
		$this->appDir   = APPS_DIR . '/' . $_GET['app'];
		
		// 载入当前用户地区使用的默认的语言包
		$this->_locale = UE_Lang::getLocale();
		
		UE_Lang::add('common');
		UE_Lang::add('admin');
		UE_Lang::add($this->app);		 
		
		$this->_x['app']    = $this->app;
		$this->_x['ctl']    = $this->ctl;
		$this->_x['act']    = $this->act;
		$this->_x['id']     = $this->id;
		$this->_x['appDir'] = UE::site();
		$this->_x['site']   = UE::site();
		$this->_x['ctx']    = UE::context();
		$this->_x['base']   = UE::base();
		$this->_x['url']    = UE::url();
		$this->_x['urlEncoded']  = UE::urlEncoded();
		$this->_x['home']   = UE_Url::make(cfg('default_app') . '/'.cfg('default_ctl'). '/'.cfg('default_act'));
		
		//*
		// options
		$options = array();
		$options = OptionModel::loadOpts();
		foreach($options as $optionKey => $option) {
			$this->_x[$optionKey] = $option;
		}
		
		$this->_x['apps']        = AppModel::getApps();
		$this->_x['acts']        = AppModel::getActs();
		$this->_x['acls']        = AppModel::getAcls();

		// 载入管理页面使用的语言包			
		UE_Lang::add('admin');
	}
	
	public function _($param, $value = null) {
		if ($value) {
			$this->_x[$param] = $value;
		}
		
		return isset($this->_x[$param]) ? $this->_x[$param] : null;
	}
	
	/**
	 * 获取模板文件的路径
	 *
	 * @param string $tpl  模板文件标识（模板文件名.php前面的部分） 默认是 $tpl="{$this->ctl}.{$this->act}"
	 * @param string $app  模板所在应用，默认是 $app = $this->app
	 * @return string
	 */
	public function tpl($tpl = '', $app = '') {
		empty($app) && $app = $this->app;
		empty($tpl) && $tpl = $this->ctl.'.'.$this->act;
		$pathTo = APPS_DIR . "/$app/templates/$tpl.php";
		$pathTo = str_replace(array('../', '..\\'), array('', ''), $pathTo);
		return $pathTo;
	}
	
	protected static function _link($str) {
		return UE_Url::make($str, false, false);
	}
	public function footer() {
		return $this->tpl('footer', 'system');
	}
	
	public function header() {		
		return $this->tpl('header', 'system');
	}

	public function crumb() {
		return $this->tpl('crumb', 'system');
	}
	
	public function messageAction() {
		$this->showMessage();
	}
	
	public function showMessage() {
		$title = '系统提示信息';
		include $this->tpl('message', 'system');
	}
}